home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / mcu / float09.arc / NOTRAP.SA < prev    next >
Text File  |  1987-03-04  |  7KB  |  329 lines

  1.  NAM  NOTRAP
  2.  TTL  OVERFLOW/UNDERFLOW NO TRAP HANDLERS
  3. *
  4. * LINKING LOADER DEFINITIONS
  5. *
  6.   XDEF    UNFLNT,OVFLNT,MAXTBL,MINTBL
  7. *
  8.   XREF    ROUND,TFRACT,MOVE,INFIN,NAN,ZERO,LARGE
  9.   XREF    FILSKY,DENORM,FPMOVE,DNMTBL
  10. *
  11. * REVISION HISTORY:
  12. *   DATE    PROGRAMMER     REASON
  13. *
  14. *  28.MAY.80    G. STEVENS     ORIGINAL
  15. *  03.AUG.80    G. STEVENS     FIX MIN & MAX TABLES
  16. *  13.AUG.80    G. STEVENS     REWRITE UNFLNT W/ UTILITIES
  17. *  21.AUG.80    G. STEVENS     REWORK NOTRAP AND FIX TYPO
  18. *  22.AUG.80    G. STEVENS     SET INEXACT FLAG IN OVFLNT
  19. *  25.AUG.80    G. STEVENS     USE NEW TABLE IN UNFLNT
  20. *  27.AUG.80    J. BONEY       FIX TYPOS IN OVFLNT
  21. *  05.SEP.80    G. STEVENS     CLEAR ERROVF IN OVFLNT
  22. *  03.OCT.80    G. STEVENS     FIX BITCNT TBL. REF. IN UNFLNT
  23. *  08.DEC.80    J. BONEY       OVFLNT-CHANGED BRA CLROVF TO BSR CLROVF
  24. *
  25.  PAGE
  26. *
  27. *
  28. * HERE IS A BUNCH OF COMMONLY USED TABLES
  29. *
  30. *
  31. * MAX EXPONENT TABLE
  32. *
  33. MAXTBL FDB  SMAXEX  SINGLE
  34.        FDB  DMAXEX  DOUBLE
  35.        FDB  EMAXEX  EXTENDED
  36.        FDB  EMAXEX  EXT. FORCE TO SINGLE
  37.        FDB  EMAXEX  EXT. FORCE TO DOUBLE
  38. *
  39. * MIN EXPONENT TABLE
  40. *
  41. MINTBL FDB  SMINEX  SINGLE
  42.        FDB  DMINEX  DOUBLE
  43.        FDB  EMINEX  EXTENDED
  44.        FDB  EMINEX  EXT. FORCE TO SINGLE
  45.        FDB  EMINEX  EXT. FORCE TO DOUBLE
  46. *
  47. *
  48. *
  49. * BIT COUNT TABLE ( TELLS HOW MANY BITS
  50. * OF SIGNIFICANCE THERE GIVEN A CERTAIN
  51. * PRECISION )
  52. *
  53. BITCNT FDB  25    SINGLE
  54.        FDB  54    DOUBLE
  55.        FDB  65    EXTENDED
  56.        FDB  25    EXT. FORCE TO SINGLE
  57.        FDB  54    EXT. FORCE TO DOUBLE
  58. *
  59. *
  60. * HERE ARE THE "NO TRAP" OVERFLOW AND UNDERFLOW
  61. * HANDLERS.
  62. *
  63. ******************************************************************
  64. *
  65. * SUBROUTINE  UNFLNT
  66. *
  67. *    UNFLNT HANDLES UNDERFLOW WHEN THE UNDERFLOW
  68. * TRAP IS DISABLED.
  69. *
  70. * ON ENTRY: STCK FRAME RESULT CONTAINS INPUT ARGUMENT.
  71. *        U - POINTER TO THE STACK FRAME
  72. *
  73. * ON EXIT: STACK FAME RESULT CONTAINS A DENORMALIZED
  74. *       VALUE OR TRUE ZERO.
  75. *       U,S - UNCHANGED
  76. *       X,Y,D,CC - DESTROYED
  77. *
  78. * OPERATION:
  79. *    THE RESULT IS DENORMALIZED ROUNDED AND SET TO
  80. * A TRUE ZERO IF NECCESSARY. IF THE ROUNDING MODE IS
  81. * NOT EITHER ROUND TO - INFINITY OR + INFINITY, THEN
  82. * THE UNDERFLOW FLAG IS SET.
  83. *
  84. *
  85. UNFLNT EQU  *
  86. *
  87. * GET PROPER MIN. EXPONENT
  88. *
  89.  LEAY  BITCNT,PCR
  90.  LEAX  DNMTBL,PCR    EXPONENT TABLE
  91.  LDB  RPREC,U        DETERMONE PRECISION
  92.  ABX            PTR INTO EXPONENT TABLE
  93.  LEAY  B,Y        PTR INTO BITCNT TABLE
  94. *
  95. * TAKE DIFFERENCE OF MIN. AND ACTUAL
  96. * EXPONENTS
  97. *
  98.  LDD  0,X
  99.  SUBD  EXPR,U
  100. *
  101. * IF THE EXPONENT DIFFERENCE MEANS THAT THE FRACTION
  102. * AND THE GUARD BIT WILL BECOME ZERO UPON DENORMALIZING
  103. * THEN JUST OR THESE BITS INTO THE STIKY AND ZERO THEM OUT.
  104. *
  105.  LEAX  RESULT,U
  106.  IF  D,GT,(0,Y)
  107.    LBSR  FILSKY       FILL STIKY
  108. *
  109. * ELSE DENORMALIZE THE FRACTION AS PLANNED
  110. *
  111.  ELSE
  112.    LBSR  DENORM         DENORMALIZE THE FRACTION
  113. *
  114.  ENDIF
  115. *
  116.  LBSR  ROUND            ROUND RESULT
  117. *
  118. * IF THE FRACTION BECAME ZERO AS A RESULT OF DENORMALIZING
  119. * AND ROUNDING, THEN SET THE RESULT TO A TRUE ZERO.
  120. *
  121.  LBSR  TFRACT
  122.  IFCC  EQ            FRACTION IS ZERO
  123.    LDD    #$8000            ZERO EXPONENT
  124.    STD    EXPR,U
  125.    LDA    #TYZERO         ZERO TYPE
  126.    STA    TYPER,U
  127. *
  128. * ELSE SET THE PROPER DENORMALIZED EXPONENT
  129. *
  130.  ELSE
  131.    LEAX  MINTBL,PCR        MINIMUM EXPONENT TABLE
  132.    LDB    RPREC,U         PRECISION INDEX
  133.    LDD    B,X            DENORMALIZED EXPONENT
  134.    STD    EXPR,U
  135. *
  136.  ENDIF
  137. *
  138. * CHECK ROUNDING MODE; IF NOT RN OR RP THEN CLEAR
  139. * THE UNDERFLOW FLAG.
  140. *
  141.  LDA  [PFPCB,U]         CONTROL BYTE IN FPCB
  142.  ANDA  #CTLRND           ROUND BITS
  143.  IF  A,NE,#RN           NOT RP
  144.    IF  A,NE,#RZ        NOT RM
  145.      LDA  TSTAT,U
  146.      ANDA  #$FF-ERRUNF       CLEAR UNDERFLOW FLAG
  147.      STA  TSTAT,U
  148. *
  149.    ENDIF
  150.  ENDIF
  151. *
  152. *
  153.  RTS               RETURN
  154. *
  155. *
  156. *
  157.  PAG
  158. *
  159. *****************************************************************
  160. *
  161. * SUBROUTINE  OVFLNT
  162. *
  163. *   OVFLNT HANDLES THE OVERFLOW WHEN THE OVERFLOW
  164. * TRAP IS DISABLED.
  165. *
  166. * ON ENTRY: STACK FRAME RESULT CONTAINS THE INPUT
  167. *        ARGUMENT
  168. *
  169. * ON EXIT: U,S - UNCHANGED
  170. *       X,Y,D,CC - DESTROYED
  171. *
  172. *
  173. OVFLNT    EQU  *
  174. *
  175.  LDA  TSTAT,U
  176.  ORA  #ERRINX         SET INEXACT RESULT BIT
  177.  STA  TSTAT,U
  178. *
  179. * CASE( ROUNDING MODE ) TO DETERMINE ACTION
  180. * TO BE TAKEN.
  181. *
  182.  LDA  [PFPCB,U]      CONTROL WORD
  183.  ANDA #CTLRND         ROUNDING BITS
  184. *
  185. * CASE OF ROUND TO MINUS INFINITY
  186. *
  187.  IF  A,EQ,#RM
  188.    BSR    CLROVF         CLEAR OVERFLOW FLAG
  189. *
  190.    LDA    RESULT,U
  191.    IFCC  GE         RESULT POSITIVE
  192.      LDA  FRACTR,U
  193. *
  194. * IF RESULT IS POSITIVE AND NORMALIZED
  195. * THEN DELIVER LARGEST POSSIBLE NUMBER
  196. * TO DESTINATION.
  197. *
  198.      IFCC  LT         RESULT NORMALIZED
  199.        LEAX  LARGE,PCR      LARGE CONSTANT
  200.        BSR  MVRES      MOVE TO RESULT
  201. *
  202.      ENDIF
  203. *
  204. * ELSE IF RESULT POSITIVE AND NOT NORMALIZED
  205. * THEN DELIVER SIGNIFICAND AND LARGEST
  206. * EXPONENT TO DESTINATION.
  207. *
  208.   BSR  SETEXP           SET LARGEST EXPONENT
  209. *
  210. * ELSE IF THE RESULT IS NEGATIVE THEN RETURN
  211. * MINUS INFINITY TO DESTINATION.
  212. *
  213.    ELSE     RESULT IS NEGATIVE
  214.      LEAX  INFIN,PCR     INFINITY CONSTANT
  215.      BSR  MVNRES     MOVE TO RESULT AND NEGATE
  216. *
  217.    ENDIF    RESULT IS POSITIVE
  218. *
  219. * CASE OF ROUND TO PLUS INFINITY
  220. *
  221.  ELSE
  222.  IF  A,EQ,#RP
  223.    BSR    CLROVF
  224. *
  225.    LDA    RESULT,U
  226.    IFCC  LT     RESULT NEGATIVE
  227.      LDA  FRACTR,U
  228. *
  229. * IF THE RESULT IS NEGATIVE AND NORMALIZED
  230. * THEN DELIVER LARGEST NEGATIVE NUMBER TO
  231. * DESTINATION.
  232. *
  233.      IFCC  LT       RESULT NORMALIZED
  234.        LEAX  LARGE,PCR      LARGE CONSTANT
  235.        BSR  MVNRES      MOVE TO RESULT AND SET NEGATIVE
  236. *
  237.      ENDIF
  238. *
  239. * ELSE IF RESULT IS NEGATIVE AND NOT NORMALIZED
  240. * THEN DELIVER SIGNIFICAND AND LARGEST EXPONENT
  241. * TO DESTINATION.
  242. *
  243.   BSR  SETEXP          SET EXPONENT GIVEN THE PRECISION
  244. *
  245. * ELSE IF THE RESULT IS POSITIVE THEN
  246. * DELIVER PLUS INFINITY TIO DESTINATION
  247. *
  248.    ELSE     RESULT IS POSITIVE
  249.      LEAX  INFIN,PCR    INFINITY CONSTANT
  250.      BSR  MVRES     MOVE TO RESULT
  251. *
  252.    ENDIF    RESULT IS NEGATIVE
  253. *
  254. * CASE OF ROUND TO NEAREST OR ZERO
  255. *
  256.  ELSE
  257. *
  258. * RETURN INFINITY FO PROPER SIGN
  259. *
  260.    LEAX  INFIN+1,PCR    INFINITY CONSTANT
  261.    LEAY  EXPR,U     DESTINATION
  262.    LDB    #ARGSIZ-1
  263.    LBSR  MOVE
  264. *
  265.  ENDIF
  266.  ENDIF       CASE( ROUNDING MODE )
  267. *
  268.  RTS     RETURN
  269. *
  270. *
  271. *  PROCEDURE CLROVF
  272. *
  273. *      CLEARS THE OVERFLOW FLAG IN TSTAT
  274. *
  275. CLROVF EQU  *
  276. *
  277.   LDA  TSTAT,U        CLEAR OVERFLOW FLAG
  278.   ANDA    #$FF-ERROVF
  279.   STA  TSTAT,U
  280. *
  281.   RTS            RETURN
  282. *
  283. *
  284. *  PROCEDURE  SETEXP
  285. *
  286. *    INSERTS LARGEST EXPONENT INTO THE EXPONENT FIELD OF THE RESULT
  287. *
  288. SETEXP EQU  *
  289. *
  290.    LDB    RPREC,U     DETERMINE PRECISION
  291.    LEAX  MAXTBL,PCR    EXPONENT TABLE
  292.    LDD    B,X
  293.    SUBD  #01
  294.    STD    EXPR,U
  295. *
  296.    RTS            RETURN
  297. *
  298. *
  299. *   PROCEDURE  MVRES
  300. *
  301. *      MOVES THE STACK FRAME ARGUMENT POINTED AT BY THE X-REG. TO
  302. *   THE STACK FRAME RESULT
  303. *
  304. MVRES EQU  *
  305. *
  306.     LEAY  RESULT,U     DESTINATION
  307.     LBSR  FPMOVE
  308. *
  309.     RTS            RETURN
  310. *
  311. *
  312. *   PROCEDURE  MVNRES
  313. *
  314. *      MOVES THE STACK FRAME ARGUMENT POINTED AT BY THE X-REG. TO
  315. *   THE STACK FRAME RESULT AND MAKES THE RESULT NEGATIVE
  316. *
  317. MVNRES EQU  *
  318. *
  319.     LEAY  RESULT,U     DESTINATION
  320.     LBSR  FPMOVE
  321.     LDA  #$80
  322.     STA  SIGNR,U
  323. *
  324.     RTS            RETURN
  325. *
  326. *
  327.  PAG
  328. *
  329.